/***************************************************************************
 *   Copyright (C) 2007 by Grzegorz Latarowski, Maciej Gajewski            *
 *   g.latarowski@gmail.com                                                *
 *   maciej.gajewski0@gmail.com                                            *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/


// Qt
#include <QLocale>

// local
#include "gdoublespinboxdelegate.h"



// ===========================================================================
//                              GDoubleSpinBoxDelegate
// ===========================================================================




// --------------- GDoubleSpinBoxDelegate::GDoubleSpinBoxDelegate() ----------
GDoubleSpinBoxDelegate::GDoubleSpinBoxDelegate( QObject * pParent )
    : GItemDelegate( pParent )
{
}
// ---------------------------------------------------------------------------


// ------------------ GDoubleSpinBoxDelegate::displayText() ------------------
QString GDoubleSpinBoxDelegate::displayText( const QVariant & value )const
{
	double num = value.toDouble();
	QLocale locale;
	
	return locale.toString( num, 'g', _decimals );
}
// ---------------------------------------------------------------------------


// --------------- GDoubleSpinBoxDelegate::createEditor() --------------------
QWidget * GDoubleSpinBoxDelegate::createEditor( QWidget * pParent,
											    const QStyleOptionViewItem & option,
											    const QModelIndex & index
											  ) const
{
	Q_UNUSED( option );
	Q_UNUSED( index );
	
    QDoubleSpinBox * pEditor = new QDoubleSpinBox( pParent );
	
	pEditor->setDecimals( _decimals );
	pEditor->setSingleStep( _singleStep );
	pEditor->setRange( _minimum, _maximum );
	pEditor->setSuffix( _suffix );
	pEditor->setPrefix( _prefix );

	connect( pEditor, SIGNAL( valueChanged( double ) ), this, SIGNAL( itemChanged() ) );
	
    return pEditor;
}
// ---------------------------------------------------------------------------


// --------------- GDoubleSpinBoxDelegate::setEditorData() --------------------
void GDoubleSpinBoxDelegate::setEditorData( QWidget * pEditor,
										    const QModelIndex & index
										  ) const
{
    double value = index.model()->data( index, Qt::UserRole ).toDouble();

    QDoubleSpinBox * pDoubleSpinBox = qobject_cast< QDoubleSpinBox * >( pEditor );
	
    pDoubleSpinBox->setValue( value );
}
// ---------------------------------------------------------------------------


// --------------- GDoubleSpinBoxDelegate::setModelData() ---------------------
void GDoubleSpinBoxDelegate::setModelData( QWidget * pEditor,
										   QAbstractItemModel * pModel,
										   const QModelIndex & index
										 ) const
{
	QDoubleSpinBox * pDoubleSpinBox = qobject_cast< QDoubleSpinBox * >( pEditor );
	
	if ( pDoubleSpinBox )
	{
		pDoubleSpinBox->interpretText();
		double value = pDoubleSpinBox->value();
		
		pModel->setData( index, value, Qt::UserRole );
		pModel->setData( index, value, Qt::DisplayRole );
	}
}
// ---------------------------------------------------------------------------



// eof
